<?php

namespace Sisesporte\Entity;

use Doctrine\ORM\Mapping as ORM,
    Doctrine\Common\Collections\ArrayCollection;

/**
 * @ORM\Entity
 * @ORM\Table(name="pessoa")
 * @ORM\Entity(repositoryClass="Sisesporte\Repository\PessoaRepository")
 */
class Pessoa extends UtilsEntity {

    public function __construct($options = NULL) {
        if (!is_null($options))
            Configurator::configure($this, $options);

        $this->autenticacao = new ArrayCollection();
        $this->telefone = new ArrayCollection();
        $this->turma = new ArrayCollection();
        $this->preMatricula = new ArrayCollection();
        $this->matriculaAluno = new ArrayCollection();
        $this->professor = new ArrayCollection();
        $this->aluno = new ArrayCollection();
        $this->endereco = new ArrayCollection();
    }

    /**
     * @var 
     * @ORM\Column(name="sq_pessoa", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $sqPessoa;

    /**
     * @var string $noPessoa
     * @ORM\Column(name="no_pessoa", type="text", nullable=false)
     */
    protected $noPessoa;

    /**
     * @var date $dtNascimento
     * @ORM\Column(name="dt_nascimento", type="date", nullable=false)
     */
    protected $dtNascimento;

    /**
     * @var string $inSexo
     * @ORM\Column(name="in_sexo", type="text", nullable=false)
     */
    protected $inSexo;

    /**
     * @var string $nuCpf
     * @ORM\Column(name="nu_cpf", type="text", nullable=true)
     */
    protected $nuCpf;

    /**
     * @var string $nuCertidaoNascimento
     * @ORM\Column(name="nu_certidao_nascimento", type="text", nullable=true)
     */
    protected $nuCertidaoNascimento;

    /**
     * @var string $nuIdentidade
     * @ORM\Column(name="nu_identidade", type="text", nullable=true)
     */
    protected $nuIdentidade;

    /**
     * @var Sisesporte\Entity\OrgaoExpedidor $sqOrgaoExpIdentidade
     * @ORM\ManyToOne(targetEntity="Sisesporte\Entity\OrgaoExpedidor", inversedBy="sq_orgao_expedidor")
     * @ORM\JoinColumn(name="sq_orgao_exp_identidade", referencedColumnName="sq_orgao_expedidor")
     */
    protected $sqOrgaoExpIdentidade;

    /**
     * @var Sisesporte\Entity\Uf $sqUfOrgExpedidor
     * @ORM\ManyToOne(targetEntity="Sisesporte\Entity\Uf", inversedBy="sq_uf")
     * @ORM\JoinColumn(name="sq_uf_org_expedidor", referencedColumnName="sq_uf")
     */
    protected $sqUfOrgExpedidor;

    /**
     * @var Sisesporte\Entity\Uf $sqUfNaturalidade
     * @ORM\ManyToOne(targetEntity="Sisesporte\Entity\Uf", inversedBy="sq_uf")
     * @ORM\JoinColumn(name="sq_uf_naturalidade", referencedColumnName="sq_uf")
     */
    protected $sqUfNaturalidade;

    /**
     * @var Sisesporte\Entity\Pais $sqNacionalidade
     * @ORM\ManyToOne(targetEntity="Sisesporte\Entity\Pais", inversedBy="sq_pais")
     * @ORM\JoinColumn(name="sq_nacionalidade", referencedColumnName="sq_pais")
     */
    protected $sqNacionalidade;

    /**
     * @var string $noMae
     * @ORM\Column(name="no_mae", type="text", nullable=true)
     */
    protected $noMae;

    /**
     * @var string $noPai
     * @ORM\Column(name="no_pai", type="text", nullable=true)
     */
    protected $noPai;

    /**
     * @var Sisesporte\Entity\EstadoCivil $sqEstadoCivil
     * @ORM\ManyToOne(targetEntity="Sisesporte\Entity\EstadoCivil", inversedBy="sq_estado_civil")
     * @ORM\JoinColumn(name="sq_estado_civil", referencedColumnName="sq_estado_civil")
     */
    protected $sqEstadoCivil;

    /**
     * @var string $noEmail
     * @ORM\Column(name="no_email", type="text", nullable=false)
     */
    protected $noEmail;

    /**
     * @var string $txCaminhoFoto
     * @ORM\Column(name="tx_caminho_foto", type="text", nullable=true)
     */
    protected $txCaminhoFoto;

    /**
     * @var Sisesporte\Entity\Cidade $sqCidadeNaturalidade
     * @ORM\ManyToOne(targetEntity="Sisesporte\Entity\Cidade", inversedBy="sq_cidade")
     * @ORM\JoinColumn(name="sq_cidade_naturalidade", referencedColumnName="sq_cidade")
     */
    protected $sqCidadeNaturalidade;

    /**
     * @var Sisesporte\Entity\GrauEscolaridade $sqGrauEscolaridade
     * @ORM\ManyToOne(targetEntity="Sisesporte\Entity\GrauEscolaridade", inversedBy="sq_grau_escolaridade")
     * @ORM\JoinColumn(name="sq_grau_escolaridade", referencedColumnName="sq_grau_escolaridade")
     */
    protected $sqGrauEscolaridade;

    /**
     * @var date $dtExpedicao
     * @ORM\Column(name="dt_expedicao", type="date", nullable=true)
     */
    protected $dtExpedicao;

    /**
     * @var date $dtCadastro
     * @ORM\Column(name="dt_cadastro", type="datetime", nullable=true)
     */
    protected $dtCadastro;

    /**
     * @var integer $nuFilho
     * @ORM\Column(name="nu_filho", type="integer", nullable=true)
     */
    protected $nuFilho;

    /**
     * @var string $inTipoPessoa
     * @ORM\Column(name="in_tipo_pessoa", type="text", nullable=true)
     */
    protected $inTipoPessoa;

    /**
     * @var boolean $stAtivo
     * @ORM\Column(name="st_ativo", type="boolean", nullable=true)
     */
    protected $stAtivo;

    /**
     * @var $autenticacao
     * @ORM\OneToMany(targetEntity="Sisesporte\Entity\Autenticacao", mappedBy="sq_pessoa")
     */
    protected $autenticacao;

    /**
     * @ORM\OneToMany(targetEntity="Sisesporte\Entity\Telefone", mappedBy="sq_pessoa")
     */
    protected $telefone;

    /**
     * @ORM\OneToMany(targetEntity="Sisesporte\Entity\Turma", mappedBy="sq_usuario")
     */
    protected $turma;

    /**
     * @ORM\OneToMany(targetEntity="Sisesporte\Entity\PreMatricula", mappedBy="sq_usuario")
     */
    protected $preMatricula;

    /**
     * @ORM\OneToMany(targetEntity="Sisesporte\Entity\MatriculaAluno", mappedBy="sq_usuario")
     */
    protected $matriculaAluno;

    /**
     * @ORM\OneToMany(targetEntity="Sisesporte\Entity\Professor", mappedBy="sq_pessoa")
     */
    protected $professor;

    /**
     * @ORM\OneToMany(targetEntity="Sisesporte\Entity\Aluno", mappedBy="sq_pessoa")
     */
    protected $aluno;

    /**
     * @ORM\OneToMany(targetEntity="Sisesporte\Entity\Endereco", mappedBy="sq_pessoa")
     */
    protected $endereco;

    public function getSqPessoa() {
        return $this->sqPessoa;
    }

    public function getNoPessoa() {
        return $this->noPessoa;
    }

    public function setNoPessoa($noPessoa) {
        $this->noPessoa = $noPessoa;
        return $this;
    }

    public function getDtNascimento() {
        return $this->formataDateTimeToDate($this->dtNascimento);
    }

    public function setDtNascimento($dtNascimento) {
        $this->dtNascimento = $this->formataDateFromDateTime($dtNascimento);
        return $this;
    }

    public function getDtCadastro() {
        return $this->formataDateTimeToDate($this->dtCadastro);
    }

    public function setDtCadastro($dtCadastro) {
        $this->dtCadastro = $this->formataDateFromDateTime($dtCadastro);
        return $this;
    }

    public function getInSexo() {
        return $this->inSexo;
    }

    public function setInSexo($inSexo) {
        $this->inSexo = $inSexo;
        return $this;
    }

    public function getNuCpf() {
        return $this->nuCpf;
    }

    public function setNuCpf($nuCpf) {
        $this->nuCpf = $nuCpf;
        return $this;
    }

    public function getNuCertidaoNascimento() {
        return $this->nuCertidaoNascimento;
    }

    public function setNuCertidaoNascimento($nuCertidaoNascimento) {
        $this->nuCertidaoNascimento = $nuCertidaoNascimento;
        return $this;
    }

    public function getNuIdentidade() {
        return $this->nuIdentidade;
    }

    public function setNuIdentidade($nuIdentidade) {
        $this->nuIdentidade = $nuIdentidade;
        return $this;
    }

    public function getSqOrgaoExpIdentidade() {
        return $this->sqOrgaoExpIdentidade;
    }

    public function setSqOrgaoExpIdentidade(OrgaoExpedidor $sqOrgaoExpIdentidade) {
        $this->sqOrgaoExpIdentidade = $sqOrgaoExpIdentidade;
        return $this;
    }

    public function getSqUfOrgExpedidor() {
        return $this->sqUfOrgExpedidor;
    }

    public function setSqUfOrgExpedidor(Uf $sqUfOrgExpedidor) {
        $this->sqUfOrgExpedidor = $sqUfOrgExpedidor;
        return $this;
    }

    public function getSqUfNaturalidade() {
        return $this->sqUfNaturalidade;
    }

    public function setSqUfNaturalidade(Uf $sqUfNaturalidade) {
        $this->sqUfNaturalidade = $sqUfNaturalidade;
        return $this;
    }

    public function getSqNacionalidade() {
        return $this->sqNacionalidade;
    }

    public function setSqNacionalidade(Pais $sqNacionalidade) {
        $this->sqNacionalidade = $sqNacionalidade;
        return $this;
    }

    public function getNoMae() {
        return $this->noMae;
    }

    public function setNoMae($noMae) {
        $this->noMae = $noMae;
        return $this;
    }

    public function getNoPai() {
        return $this->noPai;
    }

    public function setNoPai($noPai) {
        $this->noPai = $noPai;
        return $this;
    }

    public function getSqEstadoCivil() {
        return $this->sqEstadoCivil;
    }

    public function setSqEstadoCivil(EstadoCivil $sqEstadoCivil) {
        $this->sqEstadoCivil = $sqEstadoCivil;
        return $this;
    }

    public function getNoEmail() {
        return $this->noEmail;
    }

    public function setNoEmail($noEmail) {
        $this->noEmail = $noEmail;
        return $this;
    }

    public function getTxCaminhoFoto() {
        return $this->txCaminhoFoto;
    }

    public function setTxCaminhoFoto($txCaminhoFoto) {
        $this->txCaminhoFoto = $txCaminhoFoto;
        return $this;
    }

    public function getSqCidadeNaturalidade() {
        return $this->sqCidadeNaturalidade;
    }

    public function setSqCidadeNaturalidade(Cidade $sqCidadeNaturalidade) {
        $this->sqCidadeNaturalidade = $sqCidadeNaturalidade;
        return $this;
    }

    public function getSqGrauEscolaridade() {
        return $this->sqGrauEscolaridade;
    }

    public function setSqGrauEscolaridade(GrauEscolaridade $sqGrauEscolaridade) {
        $this->sqGrauEscolaridade = $sqGrauEscolaridade;
        return $this;
    }

    public function getDtExpedicao() {
        return $this->formataDateTimeToDate($this->dtExpedicao);
    }

    public function setDtExpedicao($dtExpedicao) {
        $this->dtExpedicao = $this->formataDateFromDateTime($dtExpedicao);
        return $this;
    }

    public function getNuFilho() {
        return $this->nuFilho;
    }

    public function setNuFilho($nuFilho) {
        $this->nuFilho = $nuFilho;
        return $this;
    }

    public function getInTipoPessoa() {
        return $this->inTipoPessoa;
    }

    public function setInTipoPessoa($inTipoPessoa) {
        $this->inTipoPessoa = $inTipoPessoa;
        return $this;
    }

    public function getStAtivo() {
        return $this->stAtivo;
    }

    public function setStAtivo($stAtivo) {
        $this->stAtivo = $stAtivo;
        return $this;
    }

    public function getAutenticacao() {
        return $this->autenticacao;
    }

    public function getTelefone() {
        return $this->telefone;
    }

    public function getTurma() {
        return $this->turma;
    }

    public function getPreMatricula() {
        return $this->preMatricula;
    }

    public function getMatriculaAluno() {
        return $this->matriculaAluno;
    }

    public function getProfessor() {
        return $this->professor;
    }

    public function getAluno() {
        return $this->aluno;
    }

    public function getEndereco() {
        return $this->endereco;
    }

    public function __toString() {
        return $this->noPessoa;
    }

    public function toArray() {
        return array(
            'sqPessoa' => $this->getSqPessoa(),
            'noPessoa' => $this->getNoPessoa(),
            'dtNascimento' => $this->getDtNascimento(),
            'inSexo' => $this->getInSexo(),
            'nuCpf' => $this->getNuCpf(),
            'nuCertidaoNascimento' => $this->getNuCertidaoNascimento(),
            'nuIdentidade' => $this->getNuIdentidade(),
            'sqOrgaoExpIdentidade' => $this->getSqOrgaoExpIdentidade(),
            'sqUfOrgExpedidor' => $this->getSqUfOrgExpedidor(),
            'sqUfNaturalidade' => $this->getSqUfNaturalidade(),
            'sqNacionalidade' => $this->getSqNacionalidade(),
            'noMae' => $this->getNoMae(),
            'noPai' => $this->getNoPai(),
            'sqEstadoCivil' => $this->getSqEstadoCivil(),
            'noEmail' => $this->getNoEmail(),
            'txCaminhoFoto' => $this->getTxCaminhoFoto(),
            'sqCidadeNaturalidade' => $this->getSqCidadeNaturalidade(),
            'sqGrauEscolaridade' => $this->getSqGrauEscolaridade(),
            'dtExpedicao' => $this->getDtExpedicao(),
            'nuFilho' => $this->getNuFilho(),
            'inTipoPessoa' => $this->getInTipoPessoa(),
            'stAtivo' => $this->getStAtivo(),
            'autenticacao' => $this->getAutenticacao(),
            'telefone' => $this->getTelefone(),
            'turma' => $this->getTurma(),
            'preMatricula' => $this->getPreMatricula(),
            'matriculaAluno' => $this->getMatriculaAluno(),
            'professor' => $this->getProfessor(),
            'aluno' => $this->getAluno(),
            'endereco' => $this->getEndereco()
        );
    }

}
